package topupways

import (
	"gpt-api/framework/ginplus"
	"gpt-api/pkg/model"
	"gpt-api/pkg/response"

	"github.com/gin-gonic/gin"
)

// 创建OR更新提现账户
func (h *Handler) AddCashAccount(c *gin.Context) error {
	// 验证参数
	userId := ginplus.GetUserID(c)
	var req struct {
		Id      uint   `json:"id" binding:"gte=0"`                  // ID
		Type    uint8  `json:"type" binding:"required,oneof=1 2 3"` // 1微信，2支付宝，3银行卡
		Account string `json:"account" binding:"required"`          // 收款帐号
		Idcard  string `json:"idcard" binding:"required"`           // 身份证号
		Name    string `json:"name" binding:"required"`             // 收款人姓名
		Phone   string `json:"phone" binding:"required"`            // 收款手机号
	}
	if err := c.Bind(&req); err != nil {
		return ginplus.ReplyBadRequest(c, err)
	}

	// 整理数据
	cashAccount := model.CashAccount{
		Account: req.Account,
		Idcard:  req.Idcard,
		Name:    req.Name,
		Phone:   req.Phone,
		Type:    req.Type,
		UserID:  userId,
	}

	// 如果传入ID，则更新
	if req.Id > 0 {
		cashAccount.ID = uint64(req.Id)
		err := cashAccount.Update(h.db)
		if err != nil {
			return ginplus.ReplyInternalError(c, err)
		}
	} else {
		_, err := cashAccount.Create(h.db)
		if err != nil {
			return ginplus.ReplyInternalError(c, err)
		}
	}
	return ginplus.ReplyJSON(c, nil)
}

// 提现账户列表
func (h *Handler) ListCashAccount(c *gin.Context) error {
	userId := ginplus.GetUserID(c)
	cashAccounts, err := model.CashAccount{}.GetCashAccountByUserId(h.db, userId)
	if err != nil {
		return ginplus.ReplyInternalError(c, err)
	}

	// 整理返回数据
	resp := make([]response.CashAccountListResp, 0, len(cashAccounts))
	for _, v := range cashAccounts {
		resp = append(resp, response.CashAccountListResp{
			Account: v.Account,
			Id:      v.ID,
			Idcard:  v.Idcard,
			Name:    v.Name,
			Phone:   v.Phone,
			Type:    v.Type,
		})
	}

	return ginplus.ReplyJSON(c, resp)
}
